Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Commit f2cf9a84aea45beac6d1861bb82e5252c06a221a


Parents : 9782764
Author : Mark Qvist <bc7291552be7a58f361522990465165c>
Signature : T66BB85Valid, signed by author
Date : 2026-07-17T13:06:17+02:00

Optimized transport node telemetry sensor

Changes

1 files changed, 71 insertions(+), 78 deletions(-)


Diff

diff --git a/sbapp/sideband/sense.py b/sbapp/sideband/sense.py
index a443f4bb..52484abc 100644
--- a/sbapp/sideband/sense.py
+++ b/sbapp/sideband/sense.py
@@ -2528,6 +2528,7 @@ class RNSTransport(Sensor):
self._last_traffic_txb = 0
self._last_update = 0
self._update_lock = threading.Lock()
+ self.sparse = True
super().__init__(type(self).SID, type(self).STALE_TIME)
def setup_sensor(self):
@@ -2539,15 +2540,13 @@ class RNSTransport(Sensor):
def update_data(self):
with self._update_lock:
- if time.time() - self._last_update < self.STALE_TIME:
- return
+ if time.time() - self._last_update < self.STALE_TIME: return
r = RNS.Reticulum.get_instance()
self._last_update = time.time()
ifstats = r.get_interface_stats()
rss = None
- if "rss" in ifstats:
- rss = ifstats.pop("rss")
+ if "rss" in ifstats: rss = ifstats.pop("rss")
if self.last_update == 0:
rxs = ifstats["rxs"]
@@ -2568,95 +2567,89 @@ class RNSTransport(Sensor):
transport_enabled = True
transport_uptime = ifstats["transport_uptime"]
- self.data = {
- "transport_enabled": transport_enabled,
- "transport_identity": RNS.Transport.identity.hash,
- "transport_uptime": transport_uptime,
- "traffic_rxb": ifstats["rxb"],
- "traffic_txb": ifstats["txb"],
- "speed_rx": rxs,
- "speed_tx": txs,
- "speed_rx_inst": ifstats["rxs"],
- "speed_tx_inst": ifstats["txs"],
- "memory_used": rss,
- "ifstats": ifstats,
- "interface_count": len(ifstats["interfaces"]),
- "link_count": r.get_link_count(),
- "path_table": sorted(r.get_path_table(max_hops=RNS.Transport.PATHFINDER_M-1), key=lambda e: (e["interface"], e["hops"]) )
- }
+ path_table = sorted(r.get_path_table(max_hops=RNS.Transport.PATHFINDER_M-1), key=lambda e: (e["interface"], e["hops"]) )
+
+ self.data = { "transport_enabled": transport_enabled,
+ "transport_identity": RNS.Transport.identity.hash,
+ "transport_uptime": transport_uptime,
+ "traffic_rxb": ifstats["rxb"],
+ "traffic_txb": ifstats["txb"],
+ "speed_rx": rxs,
+ "speed_tx": txs,
+ "speed_rx_inst": ifstats["rxs"],
+ "speed_tx_inst": ifstats["txs"],
+ "memory_used": rss,
+ "ifstats": ifstats,
+ "path_table": path_table,
+ "interface_count": len(ifstats["interfaces"]),
+ "link_count": r.get_link_count(),
+ "path_count": len(path_table) }
def pack(self):
d = self.data
- if d == None:
- return None
+ if d == None: return None
else:
- packed = self.data
+ packed = self.data.copy()
+ if self.sparse:
+ packed["ifstats"] = None
+ packed["path_table"] = None
return packed
def unpack(self, packed):
try:
- if packed == None:
- return None
- else:
- return packed
-
- except:
- return None
+ if packed == None: return None
+ else: return packed
+
+ except: return None
def render(self, relative_to=None):
- if self.data == None:
- return None
+ if self.data == None: return None
try:
d = self.data
ifs = {}
transport_nodes = {}
- for ife in d["ifstats"]["interfaces"]:
- ifi = ife.copy()
- ifi["paths"] = {}
- ifi["path_count"] = 0
- ifs[ifi.pop("name")] = ifi
-
- for path in d["path_table"]:
- pifn = path["interface"]
- if pifn in ifs:
- pif = ifs[pifn]
- via = path["via"]
- if not via in transport_nodes:
- transport_nodes[via] = {"on_interface": pifn}
- if not via in pif["paths"]:
- pif["paths"][via] = {}
- p = path.copy()
- p.pop("via")
- pif["paths"][via][p.pop("hash")] = p
- pif["path_count"] += 1
-
-
- values = {
- "transport_enabled": d["transport_enabled"],
- "transport_identity": d["transport_identity"],
- "transport_uptime": d["transport_uptime"],
- "traffic_rxb": d["traffic_rxb"],
- "traffic_txb": d["traffic_txb"],
- "speed_rx": d["speed_rx"],
- "speed_tx": d["speed_tx"],
- "speed_rx_inst": d["speed_rx_inst"],
- "speed_tx_inst": d["speed_tx_inst"],
- "memory_used": d["memory_used"],
- "path_count": len(d["path_table"]),
- "link_count": d["link_count"],
- "interface_count": len(ifs),
- "interfaces": ifs,
- "remote_transport_node_count": len(transport_nodes),
- "remote_transport_nodes": transport_nodes,
- "path_table": d["path_table"],
- }
-
- rendered = {
- "icon": "transit-connection-variant",
- "name": "Reticulum Transport",
- "values": values,
- }
+ if d["ifstats"]:
+ for ife in d["ifstats"]["interfaces"]:
+ ifi = ife.copy()
+ ifi["paths"] = {}
+ ifi["path_count"] = 0
+ ifs[ifi.pop("name")] = ifi
+
+ if d["path_table"]:
+ for path in d["path_table"]:
+ pifn = path["interface"]
+ if pifn in ifs:
+ pif = ifs[pifn]
+ via = path["via"]
+ if not via in transport_nodes: transport_nodes[via] = {"on_interface": pifn}
+ if not via in pif["paths"]: pif["paths"][via] = {}
+ p = path.copy()
+ p.pop("via")
+ pif["paths"][via][p.pop("hash")] = p
+ pif["path_count"] += 1
+
+ values = { "transport_enabled": d["transport_enabled"],
+ "transport_identity": d["transport_identity"],
+ "transport_uptime": d["transport_uptime"],
+ "traffic_rxb": d["traffic_rxb"],
+ "traffic_txb": d["traffic_txb"],
+ "speed_rx": d["speed_rx"],
+ "speed_tx": d["speed_tx"],
+ "speed_rx_inst": d["speed_rx_inst"],
+ "speed_tx_inst": d["speed_tx_inst"],
+ "memory_used": d["memory_used"],
+ "path_count": d["path_count"] if "path_count" in d else 0,
+ "link_count": d["link_count"],
+ "interface_count": d["interface_count"],
+ "remote_transport_node_count": len(transport_nodes),
+ "remote_transport_nodes": transport_nodes,
+ "path_table": d["path_table"],
+ "interfaces": ifs }
+
+ rendered = { "icon": "transit-connection-variant",
+ "name": "Reticulum Transport",
+ "values": values }
return rendered


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────